OC 30 day
開發一個項目,內存管理最直接影響一個項目的品質。意味著一個好的內存管理會讓項目的運行效率優良;反之,效能不好,還有可能導致項目崩潰。
內存的作用,就是儲存數據。
聲明一個變量,然後將數據儲存進去。
局部變量,當局部變量的作用預備執行完畢之後,這個局部變量就會被系統立即回收。
OC對象。使用C函數申請的動態空間。
未初始化的全局變量,靜態變量。一但初始化就回收,並轉存到數據段之中。
已經初始化的全局變量,靜態變量,直到程序結束得時候才會被回收。
代碼,程序結束得時候,系統會自動回收儲存在代碼段的數據。
stack,BSS,數據段,代碼段的數據回收是由系統自動完成的,不需要我們干預。
BSS是什麼?
因為宣告一段空間很快
而且又不是動態的
在程式一開始時就allocate一段空間
但是如果都要先初始化成某個值,那就消耗資源
如果你宣告了很多
卻都沒使用
那就浪費資源
所以,先畫出來範圍
iphone內存機制,如果一個APP佔用的內存超過40M,就會收到一個警告。45M,又會收到第二個警告。如果超過120M,APP就會直接閃退。
當有人在使用這個對象的時候,這個對象就不能回收。
只有在沒有任何人使用這個對象的時候,才可以回收。
那麼我們要如何知道這個對象有沒有人在使用呢。
我們今天的主角除來啦?
每一個對象都有一個屬性,叫做retainCount。叫做引用計數器。類型是unsigned long 佔據8個字節。引用計數器的作用:用來記錄當前這個對象有多少個人在使用它。
手動內存管理
當多一個人使用對象的時候,手動發送retain消息;少一個人使用時,手動發送release消息。
自動內存管理
系統自動在合適的地方發送retain與release消息。